Twórz firmowego asystenta AI do obsługi poczty e-mail za pomocą Gemma

Obsługa zapytań klientów, w tym e-maili, jest niezbędną częścią wiele firm, ale może to szybko stać się przytłaczające. Przy odrobinie wysiłku modele sztucznej inteligencji (AI) takie jak Gemma mogą ułatwić Ci to zadanie.

Każda firma radzi sobie z zapytaniami, takimi jak e-maile, nieco inaczej, dlatego ważne jest, aby móc dostosować technologie, takie jak generatywną AI, do potrzeb firmy. Ten projekt rozwiązuje konkretny problem polegający na wyodrębnianiu informacji o zamówieniu z e-maili wysyłanych do piekarni i przekształcaniu ich w dane ustrukturyzowane, aby można je było szybko dodawać do systemu obsługi zamówień. Wykorzystanie 10–20 przykładów zapytań możesz dostosować model Gemma tak, aby przetwarzał e-maile klientów, pomóc Ci szybko odpowiadać i integrować z systemami, z których korzystasz. Ten projekt został stworzony jako wzór aplikacji AI, który możesz rozszerzać i dostosowywać, aby czerpać korzyści z modeli Gemma dla swojej firmy.

Filmowe omówienie projektu i sposobów jego rozszerzenia, w tym statystyki od twórców gry, Asystent AI do firmowego adresu e-mail Film o tworzeniu z wykorzystaniem AI od Google. Kod tego projektu możesz też sprawdzić w repozytorium kodu Gemma Cookbook. W przeciwnym razie możesz rozpocząć rozszerzanie projektu, korzystając z podanych niżej instrukcji.

Omówienie

W tym samouczku dowiesz się, jak skonfigurować, uruchomić i rozszerzyć aplikację asystenta e-maila dla firmy utworzoną za pomocą Gemma, Pythona i Flask. Projekt udostępnia podstawowy interfejs internetowy, który możesz modyfikować zgodnie ze swoimi potrzebami. aplikacja została stworzona do wyodrębniania danych z adresów e-mail klientów do struktury fikcyjnej piekarni. Możesz użyć tego wzorca aplikacji w dowolnej firmie to zadanie, które wykorzystuje dane wejściowe i wyjściowe tekstowe.

Zrzut ekranu z interfejsem aplikacji internetowej

Rysunek 1. Interfejs projektu do przetwarzania zapytań e-mail dotyczących piekarni

Wymagania sprzętowe

Przeprowadź ten proces dostrajania na komputerze z procesorem graficznym (GPU) lub jednostką obliczeniową Tensor Processing (TPU) oraz z wystarczającą ilością pamięci GPU lub TPU, aby pomieścić istniejący model oraz dane do dostrajania. Aby uruchomić konfigurację dostrajania w tym potrzeba około 16 GB pamięci GPU – mniej więcej tyle samo RAM i co najmniej 50 GB miejsca na dysku.

Możesz uruchomić część dostrajania modelu Gemma z tego samouczka, korzystając z Colab ze środowiskiem wykonawczym GPU T4. Jeśli tworzysz ten projekt na instancji maszyny wirtualnej Google Cloud, skonfiguruj ją zgodnie z tymi wymaganiami:

  • Sprzęt GPU: do uruchomienia tego projektu wymagany jest procesor NVIDIA T4 (NVIDIA zalecany poziom L4 lub wyższy)
  • System operacyjny: wybierz opcję Deep learning on Linux (w języku angielskim), zwłaszcza maszyna wirtualna deep learning z CUDA 12.3 M124 ze wstępnie zainstalowaną aplikacją sterowniki oprogramowania GPU.
  • Rozmiar dysku rozruchowego: udostępnij co najmniej 50 GB miejsca na dysku dane, modele i oprogramowanie pomocnicze.

Konfigurowanie projektu

Te instrukcje pomogą Ci przygotować ten projekt do rozwoju i testowania. Ogólne kroki konfiguracji obejmują instalację wymaganego oprogramowania, sklonowanie projektu z repozytorium kodu, ustawienie kilku zmiennych środowiskowych, instalację bibliotek Pythona i testowanie aplikacji internetowej.

Instalowanie i konfigurowanie

Ten projekt używa Pythona 3 i środowisk wirtualnych (venv) do zarządzania pakietami i uruchomić aplikację. Poniższe instrukcje instalacji dotyczą maszyny z Linuksem.

Aby zainstalować wymagane oprogramowanie:

  • Zainstaluj Pythona 3 i pakiet środowiska wirtualnego venv dla Pythona:

    sudo apt update
    sudo apt install git pip python3-venv
    

Klonowanie projektu

Pobierz kod projektu na komputer programisty. Aby pobrać kod źródłowy projektu, musisz użyć oprogramowania do kontroli wersji git.

Aby pobrać kod projektu:

  1. Sklonuj repozytorium git za pomocą tego polecenia:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. Opcjonalnie możesz skonfigurować lokalne repozytorium Git tak, aby używało rozproszonego procesu płatności, masz więc tylko pliki związane z projektem:

    cd gemma-cookbook/
    git sparse-checkout set Demos/business-email-assistant/
    git sparse-checkout init --cone
    

Instalowanie bibliotek Pythona

Zainstaluj biblioteki Pythona za pomocą wirtualnego środowiska Python venv aktywowano do zarządzania pakietami i zależnościami Pythona. Pamiętaj, aby przed zainstalowaniem bibliotek Pythona za pomocą instalatora pip aktywować wirtualne środowisko Pythona. Aby dowiedzieć się więcej o korzystaniu z Pythona, przeczytaj Dokumentacja Pythona venv.

Aby zainstalować biblioteki Pythona:

  1. W oknie terminala przejdź do katalogu business-email-assistant:

    cd Demos/business-email-assistant/
    
  2. Skonfiguruj i aktywuj środowisko wirtualne Pythona (venv) dla tego projektu:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Zainstaluj wymagane biblioteki Pythona w tym projekcie za pomocą Skrypt setup_python:

    ./setup_python.sh
    

Ustawianie zmiennych środowiskowych

Ten projekt wymaga do uruchomienia kilku zmiennych środowiskowych, łącznie z nazwą użytkownika Kaggle i tokenem API Kaggle. Musisz mieć Kaggle i poproś o dostęp do modeli Gemma, aby móc je pobrać. W tym projekcie dodajesz nazwę użytkownika Kaggle i token interfejsu API Kaggle do 2 plików .env, które są odczytywane odpowiednio przez aplikację internetową i program do dostrajania.

Aby ustawić zmienne środowiskowe:

  1. Aby uzyskać nazwę użytkownika Kaggle i klucz tokena, postępuj zgodnie z instrukcjami w dokumentacji Kaggle.
  2. Aby uzyskać dostęp do modelu Gemma, postępuj zgodnie z instrukcjami dotyczącymi uzyskiwania dostępu do Gemma, które znajdziesz na stronie Konfiguracja Gemma.
  3. Utwórz pliki zmiennych środowiskowych dla projektu, tworząc .env w każdym tych lokalizacjach w klonie projektu:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. Po utworzeniu plików tekstowych .env dodaj następujące ustawienia do obu plików tekstowych pliki:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Uruchamianie i testowanie aplikacji

Po zakończeniu instalacji i konfiguracji projektu uruchom polecenie i upewnij się, że jest poprawnie skonfigurowana. Należy to zrobić przed edytowaniem projektu na potrzeby własne.

Aby uruchomić i przetestować projekt:

  1. W oknie terminala przejdź do katalogu email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Uruchom aplikację za pomocą skryptu run_app:

    ./run_app.sh
    
  3. Po uruchomieniu aplikacji internetowej kod programu zawiera adres URL, pod którym które można przeglądać i testować. Zwykle jest to:

    http://127.0.0.1:5000/
    
  4. Aby wygenerować odpowiedź modelu, w interfejsie internetowym kliknij przycisk Pobierz dane pod pierwszym polem danych.

Pierwsza odpowiedź modelu po uruchomieniu aplikacji trwa dłużej ponieważ musi wykonać kroki inicjowania przy pierwszym uruchomieniu generacji. Kolejne żądania i generowanie promptów w już uruchomionej aplikacji internetowej są wykonywane szybciej.

Rozszerzenie aplikacji

Gdy aplikacja zostanie uruchomiona, możesz ją wydłużyć, modyfikując nazwę użytkownika i logikę biznesową, aby umożliwić wykonywanie istotnych dla Ciebie zadań lub Twojej firmy. Zachowanie modelu Gemma możesz też zmodyfikować za pomocą kodu aplikacji, zmieniając komponenty promptu, które aplikacja wysyła do generatywnego modelu AI.

Aplikacja dostarcza modelowi instrukcje wraz z danymi wejściowymi pełny prompt dla użytkownika. Możesz zmodyfikować te instrukcje, aby zmienić zachowanie modelu, np. podać nazwy parametrów i strukturę generowanego pliku JSON. Prostszym sposobem zmiany zachowania modelu jest podanie dodatkowych instrukcji lub wskazówek dotyczących jego odpowiedzi, np. określenie, że generowane odpowiedzi nie powinny zawierać formatowania Markdown.

Aby zmodyfikować instrukcje promptu:

  1. W projekcie programistycznym otwórz plik kodu business-email-assistant/email-processing-webapp/app.py.
  2. W kodzie funkcji app.py dodaj instrukcje dotyczące funkcji get_prompt()::

    def get_prompt():
      return """
        Extract the relevant details of this request and return them in
        JSON code, with no additional markdown formatting:\n"""
    

Ten przykład dodaje wyrażenie „bez dodatkowego formatowania Markdown”. do za instrukcje.

Podanie dodatkowych instrukcji może mieć duży wpływ na wygenerowane dane wyjściowe i wymagać znacznie mniej pracy. Wypróbuj to aby sprawdzić, czy model umożliwia uzyskanie oczekiwanego zachowania. Jednak używanie promptów do modyfikowania zachowania modelu Gemma ma swoje ograniczenia. W szczególności ogólny limit tokenów wejściowych modelu, który wynosi 8192 tokenów w przypadku Gemma 2, wymaga zrównoważenia szczegółowych instrukcji prompta z rozmiarem nowych danych, aby nie przekroczyć tego limitu.

Dostrój model

Zalecanym sposobem na uzyskanie dostępu do modelu Gemma jest dostrajanie modelu Gemma lepiej reagować na określone zadania. Jeśli na przykład chcesz, aby model generował dane JSON o konkretnej strukturze, w tym z określonymi nazwami parametrów, rozważ dostosowanie modelu do tego zachowania. W zależności od zadania, które model ma wykonać, możesz uzyskać podstawowe funkcji z 10-20 przykładami. Ta sekcja samouczka wyjaśnia, jak skonfigurować i uruchomić dostrajanie modelu Gemma do konkretnego zadania.

Poniższe wskazówki wyjaśniają, jak wykonać operację dostrajania na maszynie wirtualnej, możesz jednak również przeprowadzić to dostrajanie za pomocą powiązane Notatnik z Colab w tym projekcie.

Wymagania sprzętowe

Wymagania dotyczące sprzętu do dokładnego dostosowania są takie same jak wymagania sprzętowe w pozostałych częściach projektu. Operację dostrajania możesz wykonać w środowisku Colab z użyciem środowiska wykonawczego T4 GPU jeśliograniczysz tokeny wejściowe do 256 i rozmiar partii do 1.

Przygotuj dane

Zanim zaczniesz dostrajać model Gemma, musisz przygotować dane do dostrajania. Podczas dostrajania modelu do konkretnego zadania potrzebujesz zestawu przykładów żądań i odpowiedzi. Powinny one zawierać tekst żądania bez żadnych znaków instrukcji i oczekiwany tekst odpowiedzi. Na początek przygotuj zbiór danych z około 10 przykładami. Podane przykłady powinny reprezentować pełny zróżnicowanych żądań i idealnych odpowiedzi. Upewnij się, że żądania i odpowiedzi nie są powtarzalne, ponieważ może to spowodować, że odpowiedzi modeli będą powtarzalne i nie będą się odpowiednio dostosowywać do zmian w żądaniach. Jeśli dostosowujesz model do formatu danych uporządkowanych, upewnij się, że wszystkie podane odpowiedzi są zgodne z wymaganym formatem danych. Poniżej tabela zawiera kilka przykładowych rekordów ze zbioru danych tego przykładowego kodu:

Żądanie Odpowiedź
Cześć Indian Bakery Central,\nczy masz 10 pendas? trzydzieści bundi ladoo? Czy sprzedajecie również polewy waniliowe babeczek czekoladowych. Szukam rozmiaru 6 cali { &quot;type&quot;: &quot;inquiry&quot;, "items": [ { &quot;name&quot;: &quot;pendas&quot;, "quantity": 10 }, { &quot;name&quot;: &quot;bundi ladoos&quot;, "quantity": 30 }, { "name": "tort", &quot;filling&quot;: null, "polewy": "wanilia", "sma": "czekolada", "size": "6 cali" } ]
Widziałem Twoją firmę w Mapach Google. Czy sprzedajesz jellabi i gulab? Jamun? { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] }

Tabela 1. Częściowa lista zbioru danych dostrajania na potrzeby danych poczty e-mail dla piekarni wyodrębniania danych.

Format i wczytywanie danych

Dane do strojenia możesz przechowywać w dowolnym formacie, np. w rekordach bazy danych, plikach JSON, CSV lub zwykłych plikach tekstowych, o ile masz możliwość pobierania rekordów za pomocą kodu Pythona. Ten projekt odczytuje pliki JSON z katalogu data i zapisze je w tablicy obiektów słownika. W tym przykładzie program do dostrajania wczytuje zbiór danych do dostrajania w module model-tuning/main.py za pomocą funkcji prepare_tuning_dataset():

def prepare_tuning_dataset():
    # collect data from JSON files
    prompt_data = read_json_files_to_dicts("./data")
    ...

Jak już wspomnieliśmy, zbiór danych możesz przechowywać w formacie jest to wygodne, o ile będziesz w stanie pobierać żądania z powiązanym odpowiedzi i połączyć je w ciąg tekstowy, który posłuży za rekord dostrajania.

Zbieranie rekordów dostrajania

Na potrzeby rzeczywistego procesu dostrajania program łączy wszystkie żądania i odpowiedzi w jeden ciąg z instrukcjami dotyczącymi promptów i treścią zapytania . Program dostrajania następnie tokenizuje ciąg znaków do wykorzystania przez model atrybucji. Kod do montażu rekordu dostrajania możesz znaleźć w model-tuning/main.py moduł prepare_tuning_dataset() w następujący sposób:

def prepare_tuning_dataset():
    ...
    # prepare data for tuning
    tuning_dataset = []
    template = "{instruction}\n{response}"

    for prompt in prompt_data:
        tuning_dataset.append(template.format(instruction=prompt["prompt"],
                                              response=prompt["response"]))

    return tuning_dataset

Ta funkcja przyjmuje dane jako dane wejściowe i formatuje je, dodając znak końca wiersza między instrukcją a odpowiedzią.

Generowanie wag modelu

Po załadowaniu danych do dostrajania możesz uruchomić program do dostrajania. W procesie dostrajania tej przykładowej aplikacji używany jest interfejs Keras NLP do dostrajania modelu Adaptacja niskiego rankingu (czyli technika LoRA), w celu wygenerowania nowych wag modelu. W porównaniu do pełnego precyzyjnego dostrajania LoRA jest znacznie mniej pamięci, ponieważ modeluje zmiany w wag modelu. Następnie możesz nałożyć te przybliżone wagi na istniejącą wagi modelu w celu zmiany jego zachowania.

Aby wykonać etap dostrajania i obliczyć nowe wagi:

  1. W oknie terminala przejdź do katalogu model-tuning/.

    cd business-email-assistant/model-tuning/
    
  2. Uruchom proces dostrajania za pomocą skryptu tune_model:

    ./tune_model.sh
    

Proces dostrajania może potrwać kilka minut w zależności od dostępnej mocy obliczeniowej i zasobami Google Cloud. Po zakończeniu dostrajania program dostrajania zapisze nowy *.h5 określaj wagę plików w katalogu model-tuning/weights w formacie:

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

Rozwiązywanie problemów

Jeśli dostosowanie nie zostanie ukończone, może to być spowodowane 2 prawdopodobnymi przyczynami:

  • Za mało pamięci lub zasoby wyczerpane: te błędy występują, gdy proces dostrajania żąda pamięci przekraczającej dostępną pamięć GPU lub procesor pamięci. Podczas procesu dostrajania nie uruchamiaj aplikacji internetowej. Jeśli dostosowywanie odbywa się na urządzeniu z 16 GB pamięci GPU, ustaw token_limit na 256, a batch_size na 1.
  • Sterowniki GPU nie są zainstalowane lub są z nim niezgodne: proces obracania wymaga, aby na urządzeniu obliczeniowym były zainstalowane sterowniki sprzętowe, zgodne z wersją systemu biblioteki JAX, Więcej informacji znajdziesz w dokumentacji instalacji JAX.

Wdrażanie modelu dostosowanego

Proces dostrajania generuje wiele wag na podstawie danych dostrajania i łączna liczba epok ustawionych w aplikacji do dostrajania. Domyślnie program do dostrajania generuje 3 pliki wag modelu, po jednym dla każdej epoki dostrajania. Każdy w kolejnych epokach dostrajania powstają wagi, które dokładniej odtwarzają na podstawie danych dostrajania. Współczynniki dokładności dla każdej epoki możesz zobaczyć w końcowy wynik procesu dostrajania:

...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848

Choć współczynnik dokładności ma być stosunkowo wysoki, około 0, 80 jest zbyt wysoki lub bardzo bliski 1,00, ponieważ oznacza to, wagi zbliżą się do nadmiernych ilości danych dostrajania. W takim przypadku model nie działa dobrze w przypadku żądań, które różnią się znacznie od przykładów do strojenia. Domyślnie skrypt wdrożenia wybiera 3 epokę wag, które zwykle mają współczynnik dokładności około 0,80.

Aby wdrożyć wygenerowane wagi w aplikacji internetowej:

  1. W oknie terminala przejdź do katalogu model-tuning:

    cd business-email-assistant/model-tuning/
    
  2. Uruchom proces dostrajania za pomocą skryptu deploy_weights:

    ./deploy_weights.sh
    

Po uruchomieniu tego skryptu w katalogu email-processing-webapp/weights/ powinien pojawić się nowy plik *.h5.

Testowanie nowego modelu

Po wdrożeniu nowych wag w aplikacji możesz je wypróbować po nowo dostrojonym modelu. Aby to zrobić, ponownie uruchom aplikację internetową i wygeneruj odpowiedź.

Aby uruchomić i przetestować projekt:

  1. W oknie terminala przejdź do katalogu email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Uruchom aplikację za pomocą skryptu run_app:

    ./run_app.sh
    
  3. Po uruchomieniu aplikacji internetowej kod programu zawiera adres URL, który można przeglądać i testować. Adres powinien wyglądać tak:

    http://127.0.0.1:5000/
    
  4. Aby wygenerować odpowiedź modelu, w interfejsie internetowym kliknij przycisk Pobierz dane pod pierwszym polem danych.

Model Gemma został dostrojony i wdrożony w aplikacji. Eksperymentuj z aplikacją i spróbuj określić granice możliwości generowania dostosowanego modelu w przypadku Twojego zadania. Jeśli znajdziesz scenariusze, w których model nie działa dobrze, rozważ dodanie niektórych z tych żądań do listy przykładowych danych do dostosowania, dodając żądanie i podając idealną odpowiedź. Następnie ponownie uruchom proces doboru parametrów, ponownie wprowadź nowe wagi i sprawdź wynik.

Dodatkowe materiały

Więcej informacji o tym projekcie znajdziesz w repozytorium kodu Gemma Cookbook. Jeśli potrzebujesz pomocy przy tworzeniu aplikacji lub chcesz współpracować z innymi deweloperami, skorzystaj z serwera Google Developers Community Discord. Aby dowiedzieć się więcej o projektach Build with Google AI, zapoznaj się z playlisty wideo.